package cn.tedu.inherit;
/**本类用于[测试继承]中【成员方法的使用】*/
//总结:
//1.方法重写的意义:是在不修改源代码的前提下,完成业务的修改
//2.重写的要求:子类的方法声明(返回值类型 方法名(参数列表) )和父类的一模一样
//3.重写并没有改变父类原有的业务（功能）,只是子类的业务（功能）进行了修改
public class TestExetends2 {
    public static void main(String[] args) {
        Father2 f = new Father2();
        f.eat();
        Son2 s =new Son2();//子类对象调用方法并打印输出
        s.eat();//调用的是子类本类的方法：哥哥爱吃蔬菜
        s.study();//调用的是子类本类的方法：好好学习，高考加油

    }
}
//1.创建父类
class Father2{//同一个包下，类不允许同名
    //2.普通方法
    public  void eat(){
        System.out.println("爸爸爱吃肉肉");//【重写】修改的是子类的功能,父类的功能并没有发生改变，所以不会打印输出父类的语句
    }
}

//2.创建子类
class Son2 extends Father2{//继承父类:extends Father2
    //子类提供自己特有的功能方法
    public void study(){
        System.out.println("好好学习，高考加油");
    }
    //5.对父类功能进行修改--不允许直接修改父类原有的业务
    //5.1
     @Override
//    public void eat() {
//        super.eat();//super是表示父类的一个对象被子类引用
//    }
    //5.2【功能修改】--【方法的重写Override】：子类和父类一模一样的代码
    public void eat() {
        System.out.println("哥哥爱吃蔬菜");//【功能修改】：只允许功能拓展,不允许修改原来的代码
    }
}

//【功能修改】--【方法的重写Override】
/** 重写:和父类的方法签名[返回值类型&方法名&参数列表]保持一致 void eat()一模一样,修改的是子类的功能,父类的功能并没有发生改变
   【重写时,子类必须有权限去重写父类的功能】【父类的私有方法无法被重写】
  【方法】的修饰符 >= 【父类】的修饰符
 */
 /**OCP原则:面向修改关闭,面向拓展开放--只允许功能拓展,不允许修改原来的代码*/
